#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>

int main(){
    pid_t pid;
    FILE* fp;
    time_t t;

    // 创建子进程
    pid = fork();
    if(pid < 0){
        // 如果fork失败，打印错误信息并退出
        perror("fork error");
        exit(1);
    }

    if(pid > 0){
        // 如果当前进程是父进程，则退出
        exit(0);
    }

    // 创建一个新的会话
    setsid();
    // 更改文件权限掩码，确保新创建的文件具有最宽松的权限
    umask(0);
    // 更改当前工作目录到/tmp
    chdir("/tmp");
    // 关闭所有打开的文件描述符
    for( int i = 0; i < getdtablesize(); i++){
        close(i);
    }

    // 打开或创建time.log文件，以追加模式
    fp = fopen("time.log", "a");
    if(fp == NULL){
        // 如果打开文件失败，打印错误信息并退出
        perror("fopen error");
        exit(1);
    }

    // 无限循环，记录当前时间到文件中
    while(1){
        time(&t);
        fprintf(fp, "%s", ctime(&t));
        fflush(fp);
        sleep(1);
    }

    return 0;
}